# 1. 环境与LLM初始化
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI

load_dotenv()


llm = ChatOpenAI(
    model_name="qwen-plus",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    temperature=0  # 0表示输出更确定，适合需要精确决策的场景
)

# 2. 定义工具（仅天气工具，单工具多步骤）
from langchain_core.tools import tool

@tool(description="查指定城市指定日期的天气，参数：城市,日期（YYYY-MM-DD），示例：北京,2024-10-15")
def WeatherTool(query: str) -> str:
    try:
        city, date = query.split(",")
        city, date = city.strip(), date.strip()
        # 模拟两日天气数据
        weather_data = {
            ("北京", "2024-10-15"): "晴，18~28℃",
            ("北京", "2024-10-16"): "多云，16~25℃"
        }
        return f"{city} {date}：{weather_data.get((city, date), '暂无该日期天气数据')}"
    except ValueError:
        return "参数格式错误！示例：北京,2024-10-15"

tools = [WeatherTool]

# 3. 加载规划提示词与创建 Agent
from langchain import hub
from langchain.agents import create_plan_and_execute_agent

# 从 LangChain Hub 加载预设规划提示词
plan_prompt = hub.pull("hwchase17/plan-and-execute")

# 创建 Plan-and-Execute Agent（整合规划器、执行器、工具）
agent = create_plan_and_execute_agent(
    llm=llm,
    tools=tools,
    prompt=plan_prompt,
    verbose=True  # 打印规划步骤和执行过程
)

Create

# 4. 测试单工具多步骤任务（查询北京两日天气）
if __name__ == "__main__":
    print("===== 测试：规划北京2024-10-15至16日天气查询 =====")
    # 调用 Agent 处理任务
    result = agent.run("查询北京2024年10月15日和16日的天气，整理成两日天气报告")
    # 输出结果
    print("\n===== 最终天气报告 =====")
    print(result)